---About-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
AlertMe! indicator idea and code created for you by FooeyBar/Beerrun sdg
If any errors found or supporting collaboration efforts offered, please contact me at: https://www.forexfactory.com/beerrun or https://www.mql5.com/en/users/beerrun
Get the latest version for free at: https://www.forexfactory.com/showthread.php?t=994479
This is the full manual for the AlertMe! indicator.

***3.01 beta edition***

***This indicator is a real-time modifiable alert system. 
	To expand the alert conditions, simply load a new instance of the indicator with the approriate Group Name.
	To decrease the alert conditions, simply remove a specific instance of the indicator.
***There is no lookback!
***There are no chart objects displayed!
***It is not an EA! It will not trade for you!

---Settings-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
	Group Name: The name for a group of signals. Entering a group name that does not exist will create a new group
	Signal Reset: When to clear the signal for this indicator instance:on a new tick, or, on a new bar
	Alerts: Send the alert when there is a group signal, when this indicator instance has a signal, or none
	Alert Type: Choose a combination of alerts, notifications, or emails
	Message: The message sent in the alert. The message used will be from the last indicator in the group to generate a signal
	----------------------: separator and additional settings input
	Signal Source: parameter input
	----------------------: separator
	GLE: Greater than, less than, equal to, etc. This compares the above signal source to the below base source to trigger a signal
	----------------------: separator
	Base Source: parameter input

---Input Format-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
***This indicator operates by passing input directly to MQL4 functions; in order to properly use this program the user should be familiar with:
	MQL4 function headers  https://book.mql4.com/basics/functions
	MQL4 function list     https://docs.mql4.com/function_indices
	MQL4 predefined        https://docs.mql4.com/predefined
	MQL4 iCustom inputs    https://docs.mql4.com/indicators/icustom

***To separate each parameter use any of the following:
	/ ; | , ( 

***When calling a function or variable, the first parameter entered must be the function or variable name. For example:
	Close, 1    is correct format to get the value of Close[1].
	Close 1     is incorrect format and will be read as a single string parameter "Close 1".
	iLow/0/1    is correct format to get the value of iLow(NULL,0,1).
	iLow 0/1    is incorrect format and will be read as a string parameter "iLow 0" and the number 1.
	iCustom...  is incorrect, DO NOT INPUT iCustom.

***Each data source is restricted to the currency symbol of the chart. This is intentionally implemented to enforce utilization of individual symbol events.
	In any applicable functions that require the symbol parameter, this parameter has been removed.
	When entering an input call to a function, DO NOT ENTER the symbol parameter.

***Default values have been implemented for single inputs: close, open, high, low, time, volume. 
	If the entered input consists of a single word listed above, the default values use the parameters: timeframe=current, index=0. For example:
		Close  if this is the only parameter entered, then the value returned will be Close[0]
		Time   if this is the only parameter entered, then the value returned will be Time[0]

***Some functions do have support for default MQL4 parameter values, where the inner parameter can be omitted by the user. 
	However, this is not consistently implemented and best practice is to enter all parameters.
	
***The input can be written many ways, for example: 
	iRSI(0,7,0,1)
	iRSI(0/7/0/1)
	iRSI(0;7;0;1)
	iRSI(0|7|0|1)
	iRSI,0,7,0,1
	iRSI,current;7(0|1
	close,1
	high; 3
	low/5
	30.7
	1.4.2002 12:40:30
	Volume
	and etc.

***Enumerations are supported in this program, MQL4 and additional. Enumerations are applicable when the number of input parameters is greater than two.
	When entered after the function name, words like Close, M15, and MODE_SMA are matched to their respective integer values.
	Additional enumerations and spellings have been added, for example the following spellings of "close" all represent the same integer, 0:
		Close
		close
		CL
		Cl
		cl

***Data type tags have been included, see list below. The data type tags are used to force interpretation of a parameter. This primarily applies only to the use of custom indicators.
	For example:
		100.5     will be read as a double number
		100.5-f   will be read as a float number
		100.5-s   will be read as a string
		100.5 -s  spaces are allowed
	However, given the possibility of a custom indicator having the same name as an MQL4 function, the tag "-!" is used to inform the indicator that the input is not a custom indicator.

***iCustom has been implemented up to its maximum of 64 parameters.
	iCustom has numerous reports and articles written about it that the user should familiarize themselves with in order to use the indicator properly.

	DO NOT ENTER "iCustom" as a function name; instead enter the exact name of the indicator file as the first parameter, like so:
		iCustom,timeframe,"MySuperIndicator"   is incorrect
		MySuperIndicator,timeframe             is correct

	In this indicator, iCustom parameters are entered almost the same as the MQL4 documentation. As stated earlier, DO NOT ENTER the symbol parameter.
	Default parameters are supported: timeframe, mode, and shift; the default parameters must always be entereded if additional custom parameters are also entered.
	Omission of default parameters uses a right-to-left method, meaning that:
		if shift parameter is entered, timeframe and mode parameters must also be entered:
			MySuperIndicator,shift                  is incorrect
			MySuperIndicator,timeframe,mode,shift   is correct	
		if mode parameter is entered, timeframe parameter must also be entered:
			MySuperIndicator,mode		  is incorrect
			MySuperIndicator,timeframe,mode   is correct
		if any custom parameters are entered, then all default parameters must be entered:
			MySuperIndicator,custom_parameters,shift                  is incorrect
			MySuperIndicator,timeframe,custom_parameters,mode,shift   is correct


***In order to have statements printed to the log, enter "print" anywhere into the first separator line like so:
	"---------------print--"
	"print"
	and etc.

***This indicator uses a 1ms timer in addition to tick events. 
	If the indicator detects an MQL4 function is used and both data source positions are greater than zero, the timer will be shut off automatically.
	To turn off the timer and operate with tick events only, enter "notimer" anywhere into the first separator line:
		"-------notimer----"
		"notimer"
		etc.

***The indicator, when loaded, will wait for a new bar to begin generating signals. This will be changed in the future, as some bar timeframes require more time to complete.
***Other future modifactions include: percentage values, inverse signals (bear+bull in one group), set timer, ask and bid arrays, display box on chart, etc

---Examples-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
***Price Crosses MA downwards
	To do this, two instances of the indicator must be loaded onto the chart. We will use the most recently closed bars: 1, 2.
	The first instance settings:
		Group Name: Price MA Bear Cross
		Signal Reset: On New Bar
		Alerts: Group
		Type: Alerts
		Message: (leave blank for default: "Group Signal!")
		Separator: -----------------------------
		Signal Source: close,2
		Separator: -----------------------------
		GLE: Greater Than
		Separator: -----------------------------
		Base Source: iMA,current,200,0,SMA,close,2

	The second instance settings:
		Group Name: Price MA Bear Cross
		Signal Reset: On New Bar
		Alerts: Group
		Type: Alerts
		Message:
		Separator: -----------------------------
		Signal Source: close,1 
		Separator: -----------------------------
		GLE: Less Than
		Separator: -----------------------------
		Base Source: iMA,current,200,0,SMA,close,1

***EURUSD CCI Greater Than 100 & GBPUSD CCI Greater Than 100
	To do this, we will place the indicator on the EURUSD chart with settings:
		Group Name: CCI Overbought
		Signal Reset: On New Bar
		Alerts: Group
		Type: Alerts
		Message:
		Separator: -----------------------------
		Signal Source: iCCI,current,50,close,1
		Separator: -----------------------------
		GLE: Greater Than
		Separator: -----------------------------
		Base Source: 100

	Also we will load the indicator on the GBPUSD chart with the same settings:
		Group Name: CCI Overbought
		Signal Reset: On New Bar
		Alerts: Group
		Type: Alerts
		Message:
		Separator: -----------------------------
		Signal Source: iCCI,current,50,close,1
		Separator: -----------------------------
		GLE: Greater Than
		Separator: -----------------------------
		Base Source: 100

***Bearish Engulfing Candle
	We will use the indicator twice on the same chart. The first indicator settings:
		Group Name: Bearish Engulfing Candle
		Signal Reset: On New Bar
		Alerts: Group
		Type: Alerts
		Message:
		Separator: -----------------------------
		Signal Source: open,1
		Separator: -----------------------------
		GLE: Greater Than
		Separator: -----------------------------
		Base Source: open,2
		
	The second indicator settings:
		Group Name: Bearish Engulfing Candle
		Signal Reset: On New Bar
		Alerts: Group
		Type: Alerts
		Message:
		Separator: -----------------------------
		Signal Source: close,1
		Separator: -----------------------------
		GLE: Less Than 
		Separator: -----------------------------
		Base Source: close,2

---Lists-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
***Functions (163):
***The functions implemented have been derived down from a larger project, therefore many included functions might seem to have no purpose in this program.
	iCustom
	iBars
	iClose
	iOpen
	iHigh
	iHighest
	iLow
	iLowest
	iTime
	iVolume
	iAC
	iAD
	iAO
	iATR
	iBearsPower
	iBullsPower
	iCCI
	iDeMarker
	iFractals
	iBWMFI
	iMomentum
	iMFI
	iOBV
	iRSI
	iRVI
	iWPR
	iADX
	iAlligator
	iBands
	iEnvelopes
	iForce
	iGator
	iIchimoku
	iMA
	iOsMA
	iMACD
	iSAR
	iStdDev
	iStochastic
	IsConnected
	IsDemo
	IsDllsAllowed
	IsExpertEnabled
	IsLibrariesAllowed
	IsOptimization
	IsTesting
	IsTradeAllowed
	IsTradeContextBusy
	IsVisualMode
	SetIndexArrow
	SetIndexDrawBegin
	SetIndexEmptyValue
	SetIndexLabel
	SetIndexShift
	SetIndexStyle
	SetLevelStyle
	SetLevelValue
	MQLSetInteger
	MQLInfoInteger
	Bars
	TextSetFont
	ChartClose
	ChartSetString
	ChartSetDouble
	ChartSetInteger
	ChartGetInteger
	ChartGetDouble
	ChartNavigate
	ChartIndicatorDelete
	ChartSetSymbolPeriod
	ChartScreenShot
	ChartWindowFind
	ChartPeriod
	ChartIndicatorsTotal
	ChartWindowOnDropped
	ChartXOnDropped
	ChartYOnDropped
	ChartOpen
	ChartFirst
	ChartNext
	ChartID
	ChartPriceOnDropped
	ChartRedraw
	ChartTimeOnDropped
	OrdersHistoryTotal
	OrdersTotal
	Point
	Digits
	GlobalVariableCheck
	GlobalVariableDel
	GlobalVariableGet
	GlobalVariableTemp
	GlobalVariableSetOnCondition
	GlobalVariableTime
	GlobalVariableSet
	GlobalVariableDeleteAll
	GlobalVariablesTotal
	GlobalVariablesFlush
	ObjectDelete
	ObjectSet
	ObjectMove
	ObjectSetFiboDescription
	ObjectFind
	ObjectsTotal
	ObjectGetShiftByValue
	ObjectType
	ObjectGetValueByShift
	ObjectGetTimeByValue
	Period
	SignalInfoSetDouble
	SignalInfoSetInteger
	SignalSubscribe
	SignalUnsubscribe
	SignalBaseTotal
	SignalInfoGetInteger
	SignalInfoGetDouble
	SymbolSelect
	SymbolInfoDouble
	SymbolInfoInteger
	SymbolsTotal
	WindowScreenShot
	WindowBarsPerChart
	WindowFind
	WindowFirstVisibleBar
	WindowHandle
	WindowIsVisible
	WindowOnDropped
	WindowsTotal
	WindowXOnDropped
	WindowYOnDropped
	WindowPriceOnDropped
	WindowPriceMin
	WindowPriceMax
	WindowRedraw
	WindowTimeOnDropped
	SeriesInfoInteger
	AccountInfoDouble
	AccountBalance
	AccountCredit
	AccountEquity
	AccountFreeMargin
	AccountFreeMarginCheck
	AccountFreeMarginMode
	AccountLeverage
	AccountMargin
	AccountProfit
	AccountInfoInteger
	AccountNumber
	AccountStopoutLevel
	AccountStopoutMode
	Comment
	TerminalInfoInteger
	TerminalInfoDouble
	IndicatorSetDouble
	IndicatorSetInteger
	IndicatorSetString
	IndicatorBuffers
	IndicatorCounted
	IndicatorDigits
	IndicatorShortName
	MarketInfo
	GetLastError
	UninitializeReason

***Enumerations (168):
	0: false, False, Close, close, CL, Cl, cl, MODE_OPEN, Current, current, PERIOD_CURRENT, MODE_SMA, SMA, sma, MODE_MAIN, MAIN, main
	1: true, True, Open, open, OP, Op, op, MODE_LOW, M1, m1, PERIOD_M1, MODE_EMA, EMA, ema, MODE_PLUSDI, PLUSDI, plusdi, MODE_SIGNAL, SIGNAL, signal, MODE_UPPER, UPPER, upper,
	   MODE_GATORJAW, GATORJAW, gatorjaw, MODE_TENKANSEN, TENKANSEN, tenkansen
	2: High, high, HI, Hi, hi, MODE_HIGH, PERIOD_M2, M2, m2, MODE_SMMA, SMMA, smma, MODE_MINUSDI, MINUSDI, minusdi, MODE_LOWER, LOWER, lower, MODE_GATORTEETH, GATORTEETH, gatorteeth,
	   MODE_KIJUNSEN, KIJUNSEN, kijunsen
	3: Low, low, LO, Lo, lo, MODE_CLOSE, PERIOD_M3, M3, m3, MODE_LWMA, LWMA, lwma, MODE_GATORLIPS, GATORLIPS, gatorlips, MODE_SENKOUSPANA, SENKOUSPANA, senkouspana
	4: Median, median, ME, Me, me, MODE_VOLUME, PERIOD_M4, M4, m4, MODE_SENKOUSPANB, SENKOUSPANB, senkouspanb
	5: Typical, typical, TY, Ty, ty, MODE_TIME, M5, m5, PERIOD_M5, MODE_CHIKOUSPAN, CHIKOUSPAN, chikouspan
	6: Weighted, weighted, WE, We, we, PERIOD_M6, M6, m6
	10: M10, m10, PERIOD_M10
	12: M12, m12, PERIOD_M12
	15: M15, m15, PERIOD_M15
	20: M20, m20, PERIOD_M20
	30: M30, m30, PERIOD_M30
	60: H1, h1, PERIOD_H1
	120: H2, h2, PERIOD_H2
	180: H3, h3, PERIOD_H3
	240: H4, h4, PERIOD_H4
	360: H6, h6, PERIOD_H6
	480: H8, h8, PERIOD_H8
	720: H12, h12, PERIOD_H12
	1440: D1, d1, PERIOD_D1
	10080: W1, w1, PERIOD_W1
	43200: MN, mn, MN1, mn1, PERIOD_MN1

***Tags (11):
	-n: NULL
	-d: double
	-f: float
	-i: integer
	-l: long
	-u: uint
	-c: char
	-t: datetime
	-s: string
	-cl: colour

***Single Inputs (timeframe=0,index=0) (16):
	Close, close
	Open, open
	High, high
	Low, low
	Time, time
	Volume, volume
	Ask, ask
	Bid, bid